﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

public class PriorityQueue
{
    List<Node> nodes = new List<Node>();

    private int count;

    public int Count { get => nodes.Count; set => count = value; }

    public void Add(Node node)
    {
        node.SetColor(Color.blue);
        // 这里的sort没有判断node权重值相等的情况，可能排序后取得的值是新插的，所以单独做下处理
        //if (nodes.Count > 0 && node.Weight == nodes[0].Weight && node.PassedCost < nodes[0].PassedCost)
        if (nodes.Count > 0 && node.Weight <= nodes[0].Weight)
        // 这里要判断遇到障碍的情况
        // 有优先路径先选优先路径，没有再去循环
        {
            nodes.Insert(0, node);
        }
        else
        {
            nodes.Add(node);
            nodes.Sort();
        }
    }

    public void Remove(Node node)
    {
        node.SetColor(Color.red);
        nodes.Remove(node);
        nodes.Sort();
    }

    public Node GetFirst()
    {
        nodes[0].SetColor(Color.yellow);
        return nodes[0];
    }

    public bool Contains(Node node)
    {
        return nodes.Contains(node);
    }

    public void Clear()
    {
        nodes.Clear();
    }
}

